/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.general.bc;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.cip.esymons.general.be.PersonaJuridica;
import org.cip.esymons.general.be.Rubro;

/**
 *
 * @author oscar
 */
@Stateless
public class PersonaJuridicaFacade implements PersonaJuridicaFacadeLocal {

    @PersistenceContext
    private EntityManager em;

    public void create(PersonaJuridica personaJuridica) {
        em.persist(personaJuridica);
    }

    public void edit(PersonaJuridica personaJuridica) {
        em.merge(personaJuridica);
    }

    public void remove(PersonaJuridica personaJuridica) {
        em.remove(em.merge(personaJuridica));
    }

    public PersonaJuridica find(Object id) {
        return em.find(PersonaJuridica.class, id);
    }

    public List<PersonaJuridica> listarEmpresas() {

        List<PersonaJuridica> lista = new ArrayList<PersonaJuridica>();
        try{
            lista = em.createQuery("select pj from PersonaJuridica pj").getResultList();
        }catch(Exception ex){
            return null;
        }
        return lista;
    }

    public List<PersonaJuridica> findAll() {
        List<PersonaJuridica> lista = em.createQuery("select pj from PersonaJuridica pj").getResultList();
        Rubro rubro = (Rubro) em.createQuery("select r from Rubro r where r.rubDescripcion = 'Ninguno'").getSingleResult();
        for (PersonaJuridica pj : lista) {
            if (pj.getRubCodigo() == null) {
                pj.setRubCodigo(rubro);
            }
        }
        return lista;
    }

    public List<PersonaJuridica> listarTodosBancos() {
        return em.createQuery("select object(pj) from PersonaJuridica as pj where pj.empEsBanco=true").getResultList();
    }

    public PersonaJuridica buscaJuridica(Long codigo) {
        try{
            return (PersonaJuridica) em.createQuery("select object(pj) from PersonaJuridica as pj where pj.solCodigo=?1").setParameter(1, codigo).getSingleResult();
        }catch(Exception ex){
            return null;
        }
    }

    public PersonaJuridica buscaJuridicaPorRazonSocial(String razon) {
        try {
            return (PersonaJuridica) em.createQuery("select object(pj) from PersonaJuridica as pj where pj.emprazonSocial=?1").setParameter(1, razon).getSingleResult();
        } catch (Exception ex) {
            System.out.println("FATAL: " + ex.getMessage());
            return new PersonaJuridica();
        }
    }

    public List<PersonaJuridica> buscaJuridicaPorRazonSocial2(String razon) {
        try {
            return em.createQuery("select object(pj) from PersonaJuridica as pj where pj.emprazonSocial like ?1").setParameter(1, "%" + razon + "%").getResultList();
        } catch (Exception ex) {
            System.out.println("FATAL: " + ex.getMessage());
            return null;
        }
    }

    public PersonaJuridica buscaBancoPorParteDeNombre(String nombreBanco) {
        try {
            return (PersonaJuridica) em.createQuery("select object(ba) from PersonaJuridica as ba where upper(ba.emprazonSocial) like ?1").setParameter(1, "%" + nombreBanco + "%").getSingleResult();
        } catch (Exception e) {
            return null;
        }
    }

    public List<PersonaJuridica> listaPJuridicasXCond(String cond) {
        try {
            return em.createQuery("select o from PersonaJuridica o where upper(o.emprazonSocial) like ?1").setParameter(1, "%" + cond + "%").getResultList();
        } catch (Exception e) {
            return new ArrayList<PersonaJuridica>();
        }
    }

    public PersonaJuridica buscaJuridicaPorRuc(String ruc) {
        try {
            return (PersonaJuridica) em.createQuery("select o from PersonaJuridica o where o.solRUC = ?1").setParameter(1, ruc).getSingleResult();
        } catch (Exception e) {
            System.out.println("FATAL: " + e.getMessage());
            return null;
        }
    }

    public PersonaJuridica buscaJuridicaPorRucV2(String ruc) {
        try {
            return (PersonaJuridica) em.createQuery("select o from PersonaJuridica o where o.solRUC = ?1").setParameter(1, ruc).getSingleResult();
        } catch (Exception e) {
            System.out.println("FATAL: " + e.getMessage());
            return new PersonaJuridica();
        }
    }

}
